//虽然stack和queue中也可以存放元素
//但在STL中并没有将其划分在容器的行列，而是将其称为容器适配器
//这是因为stack和队列只是对其他容器的接口进行了包装
//STL中stack和queue默认使用deque

//适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结)
//该种模式是将一个类的接口转换成客户希望的另外一个接口

#pragma once 

#include <deque>

using namespace std;

namespace qds
{
    template<class T, class container = deque<T>>
    class queue 
    {
public:
        bool empty() const
        {
            return _con.empty();
        }

        size_t size() const 
        {
            return _con.size();
        }

        T& front()
        {
            return _con.front();
        }

        const T& front() const 
        {
            return _con.front();
        }

        T& back()
        {
            return _con.back();
        }

        const T& back() const 
        {
            return _con.back();
        }

        void push(const T& val)
        {
            _con.push_back(val);
        }

        void pop()
        {
            _con.pop_front();
        }


private:
       container _con; 
        
    };
}

